home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 8
/
QRZ Ham Radio Callsign Database - Volume 8.iso
/
pc
/
files
/
ant_nec
/
nec81tar.z
/
nec81tar
/
hintg.f
< prev
next >
Wrap
Text File
|
1991-05-13
|
11KB
|
473 lines
C $TITLE: 'HINTG'
C $NOFLOATCALLS
C
C
C
SUBROUTINE HINTG (XI,YI,ZI)
C HINTG COMPUTES THE H FIELD OF A PATCH CURRENT
COMPLEX*16 EXK,EYK,EZK,EXS,EYS,EZS,EXC,EYC,EZC,ZRATI,ZRATI2,
1 GAM,F1X,F1Y,F1Z,F2X,F2Y,F2Z,RRV,RRH,T1,FRATI
INTEGER*4 IND1,IND2
REAL*8 FPI,TP,XI,YI,ZI,RX,RY,RZ,SR,CR,CTH,R,RK,RSQ,XYMAG
REAL*4 T1XJ,T1YJ,T1ZJ,T2XJ,T2YJ,T2ZJ,CABJ,SABJ,SALPJ,B
COMMON/DATAJ/S,B,XJ,YJ,ZJ,CABJ,SABJ,SALPJ,EXK,EYK,EZK,EXS,EYS,
1 EZS,EXC,EYC,EZC,RKH,IND1,IND2,IPGND,IEXK
COMMON/GND/ZRATI,ZRATI2,FRATI,CL,CH,SCRWL,SCRWR,NRADL,KSYMP,
1 IFAR,IPERF,T1,T2
EQUIVALENCE (T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),
1(T2YJ,IND1), (T2ZJ,IND2)
DATA FPI/12.56637062D0/,TP/6.283185308D0/
RX=XI-XJ
RY=YI-YJ
RFL=-1.
EXK=(0.,0.)
EYK=(0.,0.)
EZK=(0.,0.)
EXS=(0.,0.)
EYS=(0.,0.)
EZS=(0.,0.)
DO 5 IP=1,KSYMP
RFL=-RFL
RZ=ZI-ZJ*RFL
RSQ=RX*RX+RY*RY+RZ*RZ
IF (RSQ.LT.1.D-20) GO TO 5
R=DSQRT(RSQ)
RK=TP*R
CR=DCOS(RK)
SR=DSIN(RK)
GAM=-(DCMPLX(CR,-SR)+RK*DCMPLX(SR,CR))/(FPI*RSQ*R)*S
EXC=GAM*RX
EYC=GAM*RY
EZC=GAM*RZ
T1ZR=T1ZJ*RFL
T2ZR=T2ZJ*RFL
F1X=EYC*T1ZR-EZC*T1YJ
F1Y=EZC*T1XJ-EXC*T1ZR
F1Z=EXC*T1YJ-EYC*T1XJ
F2X=EYC*T2ZR-EZC*T2YJ
F2Y=EZC*T2XJ-EXC*T2ZR
F2Z=EXC*T2YJ-EYC*T2XJ
IF (IP.EQ.1) GO TO 4
IF (IPERF.NE.1) GO TO 1
F1X=-F1X
F1Y=-F1Y
F1Z=-F1Z
F2X=-F2X
F2Y=-F2Y
F2Z=-F2Z
GO TO 4
1 XYMAG=DSQRT(RX*RX+RY*RY)
IF (XYMAG.GT.1.D-6) GO TO 2
PX=0.
PY=0.
CTH=1.
RRV=(1.,0.)
GO TO 3
2 PX=-RY/XYMAG
PY=RX/XYMAG
CTH=RZ/R
C RRV=CSQRT(1.-ZRATI*ZRATI*(1.-CTH*CTH))
RRV=ZSQRT(1.-ZRATI*ZRATI*(1.-CTH*CTH))
3 RRH=ZRATI*CTH
RRH=(RRH-RRV)/(RRH+RRV)
RRV=ZRATI*RRV
RRV=-(CTH-RRV)/(CTH+RRV)
GAM=(F1X*PX+F1Y*PY)*(RRV-RRH)
F1X=F1X*RRH+GAM*PX
F1Y=F1Y*RRH+GAM*PY
F1Z=F1Z*RRH
GAM=(F2X*PX+F2Y*PY)*(RRV-RRH)
F2X=F2X*RRH+GAM*PX
F2Y=F2Y*RRH+GAM*PY
F2Z=F2Z*RRH
4 EXK=EXK+F1X
EYK=EYK+F1Y
EZK=EZK+F1Z
EXS=EXS+F2X
EYS=EYS+F2Y
EZS=EZS+F2Z
5 CONTINUE
RETURN
END
C
C
C
SUBROUTINE TRIO(SI,BI,ICON1,ICON2,J,LD)
C COMPUTE THE COMPONENTS OF ALL BASIS FUNCTIONS ON SEGMENT J
INTEGER*4 ICON1,ICON2,N1,N2,N,NP,M1,M2,M,MP,IPSYM,J,JCOX
REAL*8 AX,BX,CX
COMMON/DATAD/N1,N2,N,NP,M1,M2,M,MP,IPSYM,WLAM
COMMON/SEGJ/AX(30),BX(30),CX(30),JCO(30),JSNO,ISCON(50),NSCON,
1 IPCON(10),NPCON
DIMENSION SI(LD),BI(LD),ICON1(LD),ICON2(LD)
DATA JMAX/30/
C**
C E WRITE(*,*) ' TRIO: J=',J,' N1=',N1
C**
JSNO=0
JCOX=ICON1(J)
IF (JCOX.GT.10000) GO TO 7
JEND=-1
IEND=-1
IF (JCOX) 1,7,2
1 JCOX=-JCOX
GO TO 3
2 JEND=-JEND
3 IF (JCOX.EQ.J) GO TO 6
JSNO=JSNO+1
IF (JSNO.GE.JMAX) GO TO 9
CALL SBF(AX(JSNO),BX(JSNO),CX(JSNO),SI,BI,
1 ICON1,ICON2,JCOX,J,LD)
JCO(JSNO)=JCOX
IF (JEND.EQ.1) GO TO 4
JCOX=ICON1(JCOX)
GO TO 5
4 JCOX=ICON2(JCOX)
5 IF (JCOX) 1,9,2
6 IF (IEND.EQ.1) GO TO 8
7 JCOX=ICON2(J)
IF (JCOX.GT.10000) GO TO 8
JEND=1
IEND=1
IF (JCOX) 1,8,2
8 JSNO=JSNO+1
CALL SBF(AX(JSNO),BX(JSNO),CX(JSNO),SI,BI,
1 ICON1,ICON2,J,J,LD)
JCO(JSNO)=J
RETURN
9 WRITE(*,10) J
STOP
C
10 FORMAT (44H TRIO - SEGMENT CONNENTION ERROR FOR SEGMENT,I5)
END
C
C
C
SUBROUTINE SBF(AA,BB,CC,SI,BI,ICON1,ICON2,I,IS,LD)
C COMPUTE COMPONENT OF BASIS FUNCTION I ON SEGMENT IS.
INTEGER*4 ICON1,ICON2,N1,N2,N,NP,M1,M2,M,MP,IPSYM,I,IS,JCOX
COMMON/DATAD/N1,N2,N,NP,M1,M2,M,MP,IPSYM,WLAM
DIMENSION SI(LD),BI(LD),ICON1(LD),ICON2(LD)
REAL*8 PI,SDH,CDH,AA,BB,CC,D,SD,CD,OMC,AJ,AP,PP,PM,QP,QM,XXI
DATA PI/3.141592654D0/,JMAX/30/
C**
C E WRITE(*,*) ' SBF: I=',I,' IS=',IS
LD=LD
C**
AA=0.
BB=0.
CC=0.
JUNE=0
JSNO=0
PP=0.
JCOX=ICON1(I)
IF (JCOX.GT.10000) JCOX=I
JEND=-1
IEND=-1
SIG=-1.
IF (JCOX) 1,11,2
1 JCOX=-JCOX
GO TO 3
2 SIG=-SIG
JEND=-JEND
3 JSNO=JSNO+1
IF (JSNO.GE.JMAX) GO TO 24
D=PI*SI(JCOX)
SDH=DSIN(D)
CDH=DCOS(D)
SD=2.*SDH*CDH
IF (D.GT.0.015) GO TO 4
OMC=4.*D*D
OMC=((1.3888889D-3*OMC-4.1666666667D-2)*OMC+.5)*OMC
GO TO 5
4 OMC=1.-CDH*CDH+SDH*SDH
5 AJ=1./(DLOG(1./(PI*BI(JCOX)))-.577215664D0)
C**
PP=PP-OMC/SD*AJ
IF (JCOX.NE.IS) GO TO 6
AA=AJ/SD*SIG
BB=AJ/(2.*CDH)
CC=-AJ/(2.*SDH)*SIG
JUNE=IEND
6 IF (JCOX.EQ.I) GO TO 9
IF (JEND.EQ.1) GO TO 7
JCOX=ICON1(JCOX)
GO TO 8
7 JCOX=ICON2(JCOX)
8 IF (IABS(JCOX).EQ.I) GO TO 10
IF (JCOX) 1,24,2
9 IF (JCOX.EQ.IS) BB=-BB
10 IF (IEND.EQ.1) GO TO 12
11 PM=-PP
PP=0.
NJUN1=JSNO
JCOX=ICON2(I)
IF (JCOX.GT.10000) JCOX=I
JEND=1
IEND=1
SIG=-1.
IF (JCOX) 1,12,2
12 NJUN2=JSNO-NJUN1
D=PI*SI(I)
SDH=DSIN(D)
CDH=COS(D)
SD=2.*SDH*CDH
CD=CDH*CDH-SDH*SDH
IF (D.GT.0.015) GO TO 13
OMC=4.*D*D
OMC=((1.3888889D-3*OMC-4.1666666667D-2)*OMC+.5)*OMC
GO TO 14
13 OMC=1.-CD
14 AP=1./(DLOG(1./(PI*BI(I)))-.577215664D0)
AJ=AP
IF (NJUN1.EQ.0) GO TO 19
IF (NJUN2.EQ.0) GO TO 21
QP=SD*(PM*PP+AJ*AP)+CD*(PM*AP-PP*AJ)
QM=(AP*OMC-PP*SD)/QP
QP=-(AJ*OMC+PM*SD)/QP
IF (JUNE) 15,18,16
15 AA=AA*QM
BB=BB*QM
CC=CC*QM
GO TO 17
16 AA=-AA*QP
BB=BB*QP
CC=-CC*QP
17 IF (I.NE.IS) RETURN
18 AA=AA-1.
BB=BB+(AJ*QM+AP*QP)*SDH/SD
CC=CC+(AJ*QM-AP*QP)*CDH/SD
RETURN
19 IF (NJUN2.EQ.0) GO TO 23
QP=PI*BI(I)
XXI=QP*QP
XXI=QP*(1.-.5*XXI)/(1.-XXI)
QP=-(OMC+XXI*SD)/(SD*(AP+XXI*PP)+CD*(XXI*AP-PP))
IF (JUNE.NE.1) GO TO 20
AA=-AA*QP
BB=BB*QP
CC=-CC*QP
IF (I.NE.IS) RETURN
20 AA=AA-1.
D=CD-XXI*SD
BB=BB+(SDH+AP*QP*(CDH-XXI*SDH))/D
CC=CC+(CDH+AP*QP*(SDH+XXI*CDH))/D
RETURN
21 QM=PI*BI(I)
XXI=QM*QM
XXI=QM*(1.-.5*XXI)/(1.-XXI)
QM=(OMC+XXI*SD)/(SD*(AJ-XXI*PM)+CD*(PM+XXI*AJ))
IF (JUNE.NE.-1) GO TO 22
AA=AA*QM
BB=BB*QM
CC=CC*QM
IF (I.NE.IS) RETURN
22 AA=AA-1.
D=CD-XXI*SD
BB=BB+(AJ*QM*(CDH-XXI*SDH)-SDH)/D
CC=CC+(CDH-AJ*QM*(SDH+XXI*CDH))/D
RETURN
23 AA=-1.
QP=PI*BI(I)
XXI=QP*QP
XXI=QP*(1.-.5*XXI)/(1.-XXI)
CC=1./(CDH-XXI*SDH)
RETURN
24 WRITE(*,25) I
STOP
C
25 FORMAT (' SBF - SEGMENT CONNECTION ERROR FOR SEGMENT',I5)
END
C
C
C
SUBROUTINE UNERE (XOB,YOB,ZOB)
C CALCULATES THE ELECTRIC FIELD DUE TO UNIT CURRENT IN THE T1 AND T2
C DIRECTIONS ON A PATCH
COMPLEX*16 ER,Q1,Q2,RRV,RRH,EDP
COMPLEX*16 EXK,EYK,EZK,EXS,EYS,EZS,EXC,EYC,EZC,ZRATI,ZRATI2,
1 T1,FRATI
INTEGER*4 IND1,IND2
REAL*4 T1XJ,T1YJ,T1ZJ,T2XJ,T2YJ,T2ZJ,CABJ,SABJ,SALPJ,B
REAL*8 TPI,CONST,XOB,YOB,ZOB,R,R2,RT,TT1,TT2,XYMAG,PX,PY,CTH
COMMON/DATAJ/S,B,XJ,YJ,ZJ,CABJ,SABJ,SALPJ,EXK,EYK,EZK,EXS,EYS,
1 EZS,EXC,EYC,EZC,RKH,IND1,IND2,IPGND,IEXK
COMMON/GND/ZRATI,ZRATI2,FRATI,CL,CH,SCRWL,SCRWR,NRADL,KSYMP,
1 IFAR,IPERF,T1,T2
EQUIVALENCE (T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),
1(T2YJ,IND1), (T2ZJ,IND2)
DATA TPI,CONST/6.283185308D0,4.771341188D0/
C CONST=ETA/(8.*PI**2)
C**
C E WRITE(*,*) ' UNERE: XOB=',XOB,' YOB=',YOB,' ZOB=',ZOB
C**
ZR=ZJ
T1ZR=T1ZJ
T2ZR=T2ZJ
IF (IPGND.NE.2) GO TO 1
ZR=-ZR
T1ZR=-T1ZR
T2ZR=-T2ZR
1 RX=XOB-XJ
RY=YOB-YJ
RZ=ZOB-ZR
R2=RX*RX+RY*RY+RZ*RZ
IF (R2.GT.1.D-20) GO TO 2
EXK=(0.,0.)
EYK=(0.,0.)
EZK=(0.,0.)
EXS=(0.,0.)
EYS=(0.,0.)
EZS=(0.,0.)
C**
C E WRITE(*,*) ' UNERE: EARLY RETURN'
C**
RETURN
2 R=DSQRT(R2)
TT1=-TPI*R
TT2=TT1*TT1
RT=R2*R
ER=DCMPLX(DSIN(TT1),-DCOS(TT1))*(CONST*S)
Q1=CMPLX(TT2-1.,TT1)*ER/RT
Q2=CMPLX(3.-TT2,-3.*TT1)*ER/(RT*R2)
ER=Q2*(T1XJ*RX+T1YJ*RY+T1ZR*RZ)
EXK=Q1*T1XJ+ER*RX
EYK=Q1*T1YJ+ER*RY
EZK=Q1*T1ZR+ER*RZ
ER=Q2*(T2XJ*RX+T2YJ*RY+T2ZR*RZ)
EXS=Q1*T2XJ+ER*RX
EYS=Q1*T2YJ+ER*RY
EZS=Q1*T2ZR+ER*RZ
IF (IPGND.EQ.1) GO TO 6
IF (IPERF.NE.1) GO TO 3
EXK=-EXK
EYK=-EYK
EZK=-EZK
EXS=-EXS
EYS=-EYS
EZS=-EZS
GO TO 6
C3 XYMAG=DSQRT(RX*RX+RY*RY)
3 XYMAG=SQRT(RX*RX+RY*RY)
IF (XYMAG.GT.1.D-6) GO TO 4
PX=0.
PY=0.
CTH=1.
RRV=(1.,0.)
GO TO 5
4 PX=-RY/XYMAG
PY=RX/XYMAG
CTH=RZ/DSQRT(XYMAG*XYMAG+RZ*RZ)
RRV=CDSQRT(1.-ZRATI*ZRATI*(1.-CTH*CTH))
5 RRH=ZRATI*CTH
RRH=(RRH-RRV)/(RRH+RRV)
RRV=ZRATI*RRV
RRV=-(CTH-RRV)/(CTH+RRV)
EDP=(EXK*PX+EYK*PY)*(RRH-RRV)
EXK=EXK*RRV+EDP*PX
EYK=EYK*RRV+EDP*PY
EZK=EZK*RRV
EDP=(EXS*PX+EYS*PY)*(RRH-RRV)
EXS=EXS*RRV+EDP*PX
EYS=EYS*RRV+EDP*PY
EZS=EZS*RRV
6 CONTINUE
C**
C E WRITE(*,*) ' UNERE: RETURN'
C**
RETURN
END
C
C
C
SUBROUTINE PCINT (XI,YI,ZI,CABI,SABI,SALPI,E)
C INTEGRATE OVER PATCHES AT WIRE CONNECTION POINT
COMPLEX*16 E
COMPLEX*16 EXK,EYK,EZK,EXS,EYS,EZS,EXC,EYC,EZC,E1,E2,E3,E4,E5,
1 E6,E7,E8,E9
INTEGER*4 IND1,IND2
REAL*4 T1XJ,T1YJ,T1ZJ,T2XJ,T2YJ,T2ZJ,CABJ,SABJ,SALPJ,B
REAL*8 TPI,XI,YI,ZI
COMMON/DATAJ/S,B,XJ,YJ,ZJ,CABJ,SABJ,SALPJ,EXK,EYK,EZK,EXS,EYS,
1 EZS,EXC,EYC,EZC,RKH,IND1,IND2,IPGND,IEXK
DIMENSION E(9)
EQUIVALENCE (T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),
1(T2YJ,IND1), (T2ZJ,IND2)
DATA TPI/6.283185308D0/,NINT/10/
C**
C E WRITE(*,*) ' PCINT: XI=',XI,' YI=',YI,' ZI=',ZI
C**
D=SQRT(S)*.5
DS=4.*D/FLOAT(NINT)
DA=DS*DS
GCON=1./S
FCON=1./(2.*TPI*D)
XXJ=XJ
XYJ=YJ
XZJ=ZJ
XS=S
S=DA
S1=D+DS*.5
XSS=XJ+S1*(T1XJ+T2XJ)
YSS=YJ+S1*(T1YJ+T2YJ)
ZSS=ZJ+S1*(T1ZJ+T2ZJ)
S1=S1+D
S2X=S1
E1=(0.,0.)
E2=(0.,0.)
E3=(0.,0.)
E4=(0.,0.)
E5=(0.,0.)
E6=(0.,0.)
E7=(0.,0.)
E8=(0.,0.)
E9=(0.,0.)
DO 1 I1=1,NINT
S1=S1-DS
S2=S2X
XSS=XSS-DS*T1XJ
YSS=YSS-DS*T1YJ
ZSS=ZSS-DS*T1ZJ
XJ=XSS
YJ=YSS
ZJ=ZSS
DO 1 I2=1,NINT
S2=S2-DS
XJ=XJ-DS*T2XJ
YJ=YJ-DS*T2YJ
ZJ=ZJ-DS*T2ZJ
CALL UNERE (XI,YI,ZI)
EXK=EXK*CABI+EYK*SABI+EZK*SALPI
EXS=EXS*CABI+EYS*SABI+EZS*SALPI
G1=(D+S1)*(D+S2)*GCON
G2=(D-S1)*(D+S2)*GCON
G3=(D-S1)*(D-S2)*GCON
G4=(D+S1)*(D-S2)*GCON
F2=(S1*S1+S2*S2)*TPI
F1=S1/F2-(G1-G2-G3+G4)*FCON
F2=S2/F2-(G1+G2-G3-G4)*FCON
E1=E1+EXK*G1
E2=E2+EXK*G2
E3=E3+EXK*G3
E4=E4+EXK*G4
E5=E5+EXS*G1
E6=E6+EXS*G2
E7=E7+EXS*G3
E8=E8+EXS*G4
1 E9=E9+EXK*F1+EXS*F2
E(1)=E1
E(2)=E2
E(3)=E3
E(4)=E4
E(5)=E5
E(6)=E6
E(7)=E7
E(8)=E8
E(9)=E9
XJ=XXJ
YJ=XYJ
ZJ=XZJ
S=XS
RETURN
END